const fileCache = require("think-cache-file");
const nunjucks = require("think-view-nunjucks");
const fileSession = require("think-session-file");
const mysql = require("think-model-mysql");
const { Console, File, DateFile } = require("think-logger3");
const path = require("path");
const isDev = think.env === "development";

/**
 * cache adapter config
 * @type {Object}
 */
exports.cache = {
  type: "file",
  common: {
    timeout: 24 * 60 * 60 * 1000, // millisecond
  },
  file: {
    handle: fileCache,
    cachePath: path.join(think.ROOT_PATH, "runtime/cache"), // absoulte path is necessarily required
    pathDepth: 1,
    gcInterval: 24 * 60 * 60 * 1000, // gc interval
  },
};

/**
 * model adapter config
 * @type {Object}
 */
exports.model = {
  type: "mysqls",
  common: {
    logConnect: isDev,
    logSql: isDev,
    logger: (msg) => think.logger.info(msg),
  },
  mysql: {
    handle: mysql,
    database: "iforyou",
    prefix: "ef_",
    encoding: "utf8",
    host: "127.0.0.1",
    port: "3306",
    user: "root",
    password: "yigeren1314",
    dateStrings: true,
    charset: "utf8mb4",
    pagesize: 30,
    connectionLimit: 10,
  },
  mysqls: {
    handle: mysql,
    database: "iforyou",
    prefix: "ef_",
    encoding: "utf8",
    host: "rm-7xv3pn3g79208yttwso.mysql.rds.aliyuncs.com",
    port: "3306",
    user: "liuxw",
    password: "uDRn0JdTT3SZh1b",
    dateStrings: true,
    pagesize: 30,
    connectionLimit: 10,
  },
};

/**
 * session adapter config
 * @type {Object}
 */
exports.session = {
  type: "file",
  common: {
    cookie: {
      name: "thinkjs",
      // keys: ['werwer', 'werwer'],
      // signed: true
    },
  },
  file: {
    handle: fileSession,
    sessionPath: path.join(think.ROOT_PATH, "runtime/session"),
  },
};

/**
 * view adapter config
 * @type {Object}
 */
exports.view = {
  type: "nunjucks",
  common: {
    viewPath: path.join(think.ROOT_PATH, "view"),
    sep: "_",
    extname: ".html",
  },
  nunjucks: {
    handle: nunjucks,
  },
};

/**
 * logger adapter config
 * @type {Object}
 */
exports.logger = {
  type: isDev ? "console" : "dateFile",
  console: {
    handle: Console,
  },
  file: {
    handle: File,
    backups: 10, // max chunk number
    absolute: true,
    maxLogSize: 50 * 1024, // 50M
    filename: path.join(think.ROOT_PATH, "logs/app.log"),
  },
  dateFile: {
    handle: DateFile,
    level: "ALL",
    absolute: true,
    pattern: "-yyyy-MM-dd",
    alwaysIncludePattern: true,
    filename: path.join(think.ROOT_PATH, "logs/app.log"),
  },
};
